package com.atguigu.gulimall.cart.vo;

import org.springframework.util.CollectionUtils;

import java.math.BigDecimal;
import java.util.List;

/**
 * 整个购物车存放的商品信息
 *
 * @desc 需要计算的属性需要重写get方法，保证每次获取属性都会进行计算
 *
 * @author: kaiyi
 * @create: 2020-09-12 09:44
 */
public class CartVo {
  /**
   * 购物车子项信息
   */
  List<CartItemVo> items;

  /**
   * 商品数量
   */
  private Integer countNum;

  /**
   * 商品类型数量
   */
  private Integer countType;

  /**
   * 商品总价
   */
  private BigDecimal totalAmount;

  /**
   * 减免价格
   */
  private BigDecimal reduce = new BigDecimal("0.00");;

  public List<CartItemVo> getItems() {
    return items;
  }

  public void setItems(List<CartItemVo> items) {
    this.items = items;
  }

  public Integer getCountNum() {
    int count = 0;
    if (items != null && items.size() > 0) {
      for (CartItemVo item : items) {
        count += item.getCount();
      }
    }
    return count;
  }

  public Integer getCountType() {
    int count = 0;
    if (items != null && items.size() > 0) {
      for (CartItemVo item : items) {
        count += 1;
      }
    }
    return count;
  }


  public BigDecimal getTotalAmount() {
    BigDecimal amount = new BigDecimal("0");
    // 计算购物项总价
    if (!CollectionUtils.isEmpty(items)) {
      for (CartItemVo cartItem : items) {
        if (cartItem.getCheck()) {
          amount = amount.add(cartItem.getTotalPrice());
        }
      }
    }
    // 计算优惠后的价格
    return amount.subtract(getReduce());
  }

  public BigDecimal getReduce() {
    return reduce;
  }

  public void setReduce(BigDecimal reduce) {
    this.reduce = reduce;
  }

}
